//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2024 Apple Inc. and the Swift project authors.
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//

import STM32F7X6
import Support

extension LTDC {
  enum Constants {
    static let hsync = 30
    static let vsync = 10
    static let hbp = 13
    static let hfp = 32
    static let vbp = 2
    static let vfp = 2

    static let pixelSize = 4

    static let displayWidth = 480
    static let displayHeight = 272

    static let layerWidth = 50
    static let layerHeight = 50
  }

  func configure() {
    rcc.pllcfgr.write {
      $0.raw.pllm = 25
      $0.raw.plln = 432
      $0.pllsrc = .HSE
    }

    rcc.cr.modify { $1.raw.pllon = 1 }
    while rcc.cr.read().raw.pllrdy != 1 {}

    // FIXME: use named fields
    rcc.cfgr.modify {
      $0.raw.storage &= 0b11
      $0.raw.storage |= 0b10
    }
    while rcc.cfgr.read().raw.storage & 0b1100 != 0b1000 {}

    rcc.pllsaicfgr.modify {
      $0.raw.pllsain = 192
      $0.raw.pllsair = 5
    }
    rcc.dckcfgr1.modify { $0.pllsaidivr = .Div4 }

    rcc.cr.modify { $1.raw.pllsaion = 1 }
    while rcc.cr.read().raw.pllsairdy != 1 {}

    rcc.enableGPIOPortClock(.a)
    rcc.enableGPIOPortClock(.b)
    rcc.enableGPIOPortClock(.c)
    rcc.enableGPIOPortClock(.d)
    rcc.enableGPIOPortClock(.e)
    rcc.enableGPIOPortClock(.f)
    rcc.enableGPIOPortClock(.g)
    rcc.enableGPIOPortClock(.h)
    rcc.enableGPIOPortClock(.i)
    rcc.enableGPIOPortClock(.j)
    rcc.enableGPIOPortClock(.k)

    let pinConfiguration = GPIOA.Configuration(
      mode: .alternateFunction,
      outputType: .pushPull,
      outputSpeed: .high,
      pull: .none,
      alternateFunction: 14)

    let clkPin = 14
    let dePin = 7
    let hsyncPin = 10
    let vsyncPin = 9

    gpioi.configure(pin: clkPin, as: pinConfiguration)
    gpiok.configure(pin: dePin, as: pinConfiguration)
    gpioi.configure(pin: hsyncPin, as: pinConfiguration)
    gpioi.configure(pin: vsyncPin, as: pinConfiguration)

    let r0Pin = 15
    let r1Pin = 0
    let r2Pin = 1
    let r3Pin = 2
    let r4Pin = 3
    let r5Pin = 4
    let r6Pin = 5
    let r7Pin = 6

    gpioi.configure(pin: r0Pin, as: pinConfiguration)
    gpioj.configure(pin: r1Pin, as: pinConfiguration)
    gpioj.configure(pin: r2Pin, as: pinConfiguration)
    gpioj.configure(pin: r3Pin, as: pinConfiguration)
    gpioj.configure(pin: r4Pin, as: pinConfiguration)
    gpioj.configure(pin: r5Pin, as: pinConfiguration)
    gpioj.configure(pin: r6Pin, as: pinConfiguration)
    gpioj.configure(pin: r7Pin, as: pinConfiguration)

    let g0Pin = 7
    let g1Pin = 8
    let g2Pin = 9
    let g3Pin = 10
    let g4Pin = 11
    let g5Pin = 0
    let g6Pin = 1
    let g7Pin = 2

    gpioj.configure(pin: g0Pin, as: pinConfiguration)
    gpioj.configure(pin: g1Pin, as: pinConfiguration)
    gpioj.configure(pin: g2Pin, as: pinConfiguration)
    gpioj.configure(pin: g3Pin, as: pinConfiguration)
    gpioj.configure(pin: g4Pin, as: pinConfiguration)
    gpiok.configure(pin: g5Pin, as: pinConfiguration)
    gpiok.configure(pin: g6Pin, as: pinConfiguration)
    gpiok.configure(pin: g7Pin, as: pinConfiguration)

    let b0Pin = 4
    let b1Pin = 13
    let b2Pin = 14
    let b3Pin = 15
    let b4Pin = 12
    let b5Pin = 4
    let b6Pin = 5
    let b7Pin = 6

    gpioe.configure(pin: b0Pin, as: pinConfiguration)
    gpioj.configure(pin: b1Pin, as: pinConfiguration)
    gpioj.configure(pin: b2Pin, as: pinConfiguration)
    gpioj.configure(pin: b3Pin, as: pinConfiguration)
    gpiog.configure(pin: b4Pin, as: pinConfiguration)
    gpiok.configure(pin: b5Pin, as: pinConfiguration)
    gpiok.configure(pin: b6Pin, as: pinConfiguration)
    gpiok.configure(pin: b7Pin, as: pinConfiguration)

    let lcdPinConfiguration = GPIOA.Configuration(
      mode: .output,
      outputType: .pushPull,
      outputSpeed: .low,
      pull: .down,
      alternateFunction: 0)

    let backlightPin = 3
    let lcdDispPin = 12

    gpiok.configure(pin: backlightPin, as: lcdPinConfiguration)
    gpioi.configure(pin: lcdDispPin, as: lcdPinConfiguration)

    gpioi.set(pin: lcdDispPin, to: true)
    gpiok.set(pin: backlightPin, to: true)

    rcc.apb2enr.modify { $0.raw.ltdcen = 1 }

    self.sscr.modify { $0.raw.vsh = UInt32(Constants.vsync - 1) }
    self.sscr.modify { $0.raw.hsw = UInt32(Constants.hsync - 1) }
    self.bpcr.modify {
      $0.raw.ahbp = UInt32(Constants.hsync + Constants.hbp - 1)
    }
    self.bpcr.modify {
      $0.raw.avbp = UInt32(Constants.vsync + Constants.vbp - 1)
    }
    self.awcr.modify {
      $0.raw.aah = UInt32(
        Constants.displayHeight + Constants.vsync + Constants.vbp - 1)
    }
    self.awcr.modify {
      $0.raw.aaw = UInt32(
        Constants.displayWidth + Constants.hsync + Constants.hbp - 1)
    }
    self.twcr.modify {
      $0.raw.totalw = UInt32(
        Constants.displayWidth + Constants.hsync + Constants.hbp + Constants.hfp
          - 1)
    }
    self.twcr.modify {
      $0.raw.totalh = UInt32(
        Constants.displayHeight + Constants.vsync + Constants.vbp
          + Constants.vfp - 1)
    }

    self.layer[1].pfcr.modify { $0.raw.storage = 0 }  // Format ARGB8888

    // FIXME: Escaping a pointer like this is very unsafe.
    // We get away with it because `pixelData` is a global let.
    pixelData.span.withUnsafeBytes { buffer in
      // swift-format-ignore: NeverForceUnwrap
      let data = UInt32(UInt(bitPattern: buffer.baseAddress!))
      self.layer[1].cfbar.modify { $0.raw.storage = data }
    }
    self.layer[1].cacr.modify { $0.raw.consta = 255 }
    self.layer[1].bfcr.modify { $0.raw.bf1 = 5 }
    self.layer[1].bfcr.modify { $0.raw.bf2 = 4 }
    self.layer[1].cfblr.modify {
      $0.raw.storage =
        UInt32(UInt32(Constants.pixelSize * Constants.layerWidth) << 16)
        | UInt32(Constants.pixelSize * Constants.layerWidth + 3)
    }
    self.layer[1].cfblnr.modify {
      $0.raw.cfblnbr = UInt32(Constants.layerHeight)
    }
    self.layer[1].cr.modify { $0.raw.len = 1 }

    self.srcr.modify { $0.raw.vbr = 1 }  // reload

    self.gcr.modify { $1.raw.ltdcen = 1 }
  }

  func set(layer: Int, position point: Point) {
    let i: Int =
      ((Constants.layerWidth + Constants.hbp + Constants.hsync - 1
        + point.x) << 16) | (Constants.hbp + Constants.hsync + point.x)
    self.layer[layer].whpcr.modify { $0.raw.storage = UInt32(i) }
    let j: Int =
      ((Constants.layerHeight + Constants.vsync + Constants.vbp - 1
        + point.y) << 16) | (Constants.vsync + Constants.vbp + point.y)
    self.layer[layer].wvpcr.modify { $0.raw.storage = UInt32(j) }
    self.srcr.modify { $0.raw.vbr = 1 }
  }

  func set(backgroundColor: Color) {
    self.bccr.modify {
      $0.raw.bcred = UInt32(backgroundColor.red)
      $0.raw.bcgreen = UInt32(backgroundColor.green)
      $0.raw.bcblue = UInt32(backgroundColor.blue)
    }
  }
}

@_used
let pixelData: InlineArray<_, UInt32> = [
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x03ff_5555, 0x3cee_5137, 0x86f0_5237, 0xbbf0_5038, 0xd6f0_5138, 0xeff0_5137,
  0xf9f0_5138, 0xfdf0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfdf0_5138, 0xf8f0_5138, 0xe6ef_5139, 0xcff0_5137, 0xb9f0_5139, 0x8bf0_5139,
  0x47f1_5339, 0x02ff_8000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x5df1_5237, 0xe4f0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xe1f0_5038, 0x57f0_5238, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x15f3_553d, 0xb2f1_5238, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0x9df0_5137, 0x0be8_462e, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x0be8_462e, 0xd4f1_5139, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xd1f0_5138, 0x0be8_462e,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x9df0_5137, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0x9df0_5137, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x57f0_5238,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0x57f0_5238, 0x0000_0000,
  0x02ff_8000, 0xe1f0_5038, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xe1f0_5038, 0x02ff_8000, 0x47f1_5339, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff4_7b68, 0xfff1_6049, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0x47f1_5339, 0x8cf0_5038, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff1_5941, 0xfffc_ddd8, 0xfff4_8573, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0x8cf0_5038,
  0xb9f0_5139, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff5_8c7b,
  0xffff_ffff, 0xfff8_ada1, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xb9f0_5139, 0xd0f0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff2_6b56, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfffb_d1ca, 0xffff_ffff, 0xfff9_b9af, 0xfff0_523a,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xcff0_5137, 0xe6ef_5139, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff1_5941,
  0xfff7_9f91, 0xfff0_5239, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff3_7461, 0xffff_ffff,
  0xffff_ffff, 0xfffa_c4bb, 0xfff0_533a, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xe6ef_5139,
  0xf9f0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_563e, 0xfff2_6852, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff3_7662, 0xfff9_bab0, 0xfff0_523a, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfffc_dad5, 0xffff_ffff, 0xffff_ffff, 0xfff8_b1a6, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xf8f0_5138, 0xfdf0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff4_8573,
  0xfff4_806e, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff7_a193,
  0xfffa_c4bb, 0xfff0_553d, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff6_9788, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfff5_9080, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfdf0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff9_bbb2, 0xfff6_998b, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5239, 0xfffb_cdc6, 0xfffb_d2cb, 0xfff1_5b43, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff2_634c,
  0xffff_fefe, 0xffff_ffff, 0xffff_ffff, 0xffff_faf9, 0xfff3_705c, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff1_5941, 0xfffc_e0db,
  0xfff9_b7ad, 0xfff0_543c, 0xfff0_5138, 0xfff0_5138, 0xfff1_5d46, 0xfffd_eae7,
  0xfffc_dfda, 0xfff2_634c, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfffc_e0dc, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xfffc_d7d2, 0xfff0_5239, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff2_6751, 0xfffe_f2f0, 0xfffc_d8d3, 0xfff2_634d, 0xfff0_5138,
  0xfff0_5138, 0xfff3_7561, 0xffff_fafa, 0xfffd_ebe8, 0xfff3_705b, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff9_bfb6, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfff6_9282, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff4_7e6c, 0xffff_fcfc,
  0xfffe_f0ee, 0xfff4_7d6b, 0xfff0_5138, 0xfff0_5138, 0xfff6_9484, 0xffff_ffff,
  0xfffe_f7f6, 0xfff5_8675, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff7_a294, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffe_f0ee,
  0xfff1_5840, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff6_9c8e, 0xffff_ffff, 0xffff_fdfd, 0xfff7_a294, 0xfff0_5138,
  0xfff0_5138, 0xfff9_b6ab, 0xffff_ffff, 0xffff_fefd, 0xfff7_a295, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff6_9384, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xfff6_9586, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff9_b8ae, 0xffff_ffff,
  0xffff_ffff, 0xfffb_cbc4, 0xfff1_5e47, 0xfff0_543b, 0xfffb_cec7, 0xffff_ffff,
  0xffff_ffff, 0xfffa_c6bd, 0xfff1_5941, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff5_8a79, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffc_ddd8, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_533a, 0xfffb_cbc4, 0xffff_ffff, 0xffff_ffff, 0xfffd_edea, 0xfff4_7d6b,
  0xfff1_5941, 0xfffc_ded9, 0xffff_ffff, 0xffff_ffff, 0xfffd_e4e0, 0xfff2_6d58,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff5_9080, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfff3_7561, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff1_5941, 0xfffc_dcd6, 0xffff_ffff,
  0xffff_ffff, 0xffff_fefe, 0xfff8_b0a4, 0xfff2_6751, 0xfffd_eae7, 0xffff_ffff,
  0xffff_ffff, 0xfffe_f7f6, 0xfff6_9383, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff6_9b8d, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfff7_a699, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff1_614a, 0xfffd_e9e6, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffc_e2dd,
  0xfff6_9181, 0xfffe_f3f2, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffa_c2b9,
  0xfff1_5b44, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff9_b9af, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffb_cfc8,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff2_6c56, 0xfffe_efed, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_fdfd, 0xfffc_e0db, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xfffd_ebe8, 0xfff4_7d6a, 0xfff0_5138, 0xfff0_5138,
  0xfffc_dcd7, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfffe_f5f4, 0xfff0_523a, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff2_6e59, 0xfffe_f0ee, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_fefe,
  0xfff9_b7ac, 0xfff2_6c57, 0xffff_fefd, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfff1_5f48, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff3_6f5a, 0xfffe_f1ef, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_fcfb, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xfff2_6953, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff3_705b, 0xfffe_f1ef, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xfff3_725e, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff3_715d, 0xfffe_efec, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfff3_6f5a, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_543b, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff2_654f, 0xfffc_e0dc, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_fefe,
  0xfff1_573f, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff5_8c7c, 0xfff5_8675, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff1_5a42, 0xfffb_cec7, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfffd_ece9, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5239,
  0xfffb_d0c9, 0xfffb_cdc6, 0xfff2_6a54, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_533a, 0xfff9_b7ad, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffb_cfc8, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff1_614a, 0xfffe_efed, 0xffff_fafa, 0xfff8_b1a6,
  0xfff2_6953, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff2_654f, 0xfffd_e5e1, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfffe_f5f3,
  0xfff2_654f, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff3_705c,
  0xfffe_f2f0, 0xffff_ffff, 0xffff_fefe, 0xfffb_d0c9, 0xfff6_9889, 0xfff2_6650,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_523a, 0xfff4_7e6c, 0xfff9_bcb3, 0xffff_fafa,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xfffb_d2cb, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff3_715d, 0xfffe_f2f0, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xfffd_ebe8, 0xfffb_cec7, 0xfff9_b5aa, 0xfff8_aa9d,
  0xfff7_a396, 0xfff8_ab9f, 0xfff9_b8ae, 0xfffb_d5cf, 0xfffe_f6f5, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfff4_8473,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff3_725d,
  0xfffe_efec, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfffc_d7d2, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff1_614a, 0xfffb_d0c9, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xfff2_6852, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfdf0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_523a,
  0xfff7_a598, 0xffff_fdfd, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xfff6_9b8d, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfdf0_5138, 0xf8f0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff3_6e5a, 0xfffa_c9c1, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfffd_ece9, 0xfffa_c8c0, 0xfff9_beb5, 0xfffb_d3cc, 0xffff_fafa,
  0xffff_ffff, 0xffff_ffff, 0xfff9_bcb3, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xf8f0_5138, 0xe6ef_5139, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff3_7763, 0xfffb_d2cb, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xfffa_c9c1, 0xfff4_7f6c, 0xfff0_5239, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff1_624c, 0xfffa_c6bd, 0xffff_ffff, 0xfffb_d0c9, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xe6ef_5139,
  0xcff0_5137, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff2_6c57,
  0xfff8_aea2, 0xfffd_e5e1, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff, 0xffff_ffff,
  0xfffd_ebe8, 0xfff8_aa9d, 0xfff2_6953, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5239, 0xfffa_c3ba,
  0xfffb_d1cb, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xcff0_5137, 0xb9f0_5139, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff2_654f, 0xfff5_8d7d,
  0xfff8_a99d, 0xfffa_c0b7, 0xfffa_cac3, 0xfffb_cfc8, 0xfff9_bdb4, 0xfff8_a99d,
  0xfff6_9585, 0xfff3_7966, 0xfff0_5239, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff1_5d45, 0xfff7_9d8f, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xb9f0_5139, 0x8bf0_5139, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0x8bf0_5139,
  0x47f1_5339, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0x47f1_5339, 0x02ff_8000, 0xe1f0_5038, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xe1f0_5038, 0x02ff_8000, 0x0000_0000, 0x57f0_5238,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0x57f0_5238, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x9df0_5137, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0x9df0_5137,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0be8_462e, 0xd1f0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xd1f0_5138, 0x0be8_462e, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0be8_462e, 0x9df0_5137, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0x9df0_5137, 0x0be8_462e, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x57f0_5238,
  0xe1f0_5038, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xe1f0_5038, 0x57f0_5238, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x02ff_8000, 0x47f1_5339, 0x8cf0_5038, 0xb9f0_5139,
  0xd0f0_5138, 0xe6ef_5139, 0xf8f0_5138, 0xfdf0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138, 0xfff0_5138,
  0xfff0_5138, 0xfff0_5138, 0xfdf0_5138, 0xf8f0_5138, 0xe6ef_5139, 0xd0f0_5138,
  0xb9f0_5139, 0x8cf0_5038, 0x47f1_5339, 0x02ff_8000, 0x0000_0000, 0x0000_0000,
  0x0000_0000, 0x0000_0000, 0x0000_0000, 0x0000_0000,
]
